2098. Переворачиватель

 

Заданы n чисел. Выведите их в обратном порядке.

 

Вход. Сначала задано число n (0 < n < 100), за ним идут n целых чисел.

 

Выход. Выведите заданные n чисел в обратном порядке.

 

Пример входа

Пример выхода

7

2 4 1 3 5 3 1

1 3 5 3 1 4 2

 

 

РЕШЕНИЕ

массив

 

Анализ алгоритма

Занесем числа в линейный массив. Затем выведем их в обратном порядке.

 

Рассмотрим решение задачи с переворотом массива. Для этого воспользуемся техникой двух указателей.

Установим две переменнные i и j (назовем их указателями):

·        i на начало массива (i = 1);

·        j на конец массива (j = n);

 

Далее запустим while цикл, в котором:

·        значения m[i] и m[j] меняются местами;

·        после чего i увеличивается на 1, а j уменьшается на 1;

Цикл продолжаем, пока указатели i и j не встретятся.

 

Отметим, что поменять значения m[i] и m[j] можно при помощи дополнительной переменной temp, выполнив три операции:

 

 

Реализация алгоритма

Читаем входные данные.

 

scanf("%d",&n);

for(i = 0; i < n; i++)

  scanf("%d",&mas[i]);

 

Выводим числа в обратном порядке.

 

for(i = n - 1; i >= 0; i--)

  printf("%d ",mas[i]);

printf("\n");

 

Реализация – с переворотом массива

Объявим массив.

 

#define MAX 110

int m[MAX];

 

Читаем входные данные.

 

scanf("%d",&n);

for(i = 1; i <= n; i++)

  scanf("%d",&m[i]);

 

При помощи техники двух указателей переворачиваем массив.

 

i = 1; j = n;

while(i < j)

{

  temp = m[i]; m[i] = m[j]; m[j] = temp;

  i++; j--;

}

 

Выводим результирующий массив.

 

for(i = 1; i <= n; i++)

  printf("%d ",m[i]);

printf("\n");

 

Реализация – динамический массив

 

#include <stdio.h>

 

int n, i;

int *mas;

 

int main(void)

{

  scanf("%d",&n);

  mas = new int[n];

 

  for(i = 0; i < n; i++)

    scanf("%d",mas+i);

 

  int *p = mas, *q = mas + n - 1;

  while(p < q)

  {

    int temp = *p; *p = *q; *q = temp;

    p++; q--;

  }

 

  for(i = 0; i < n; i++)

    printf("%d ",mas[i]);

  printf("\n");

 

  delete[] mas;

  return 0;

}

 

Реализация – вектор

 

#include <cstdio>

#include <vector>

using namespace std;

 

int n, i;

vector<int> mas;

 

int main(void)

{

  scanf("%d",&n);

  mas.assign(n,0);

 

  for(i = 0; i < n; i++)

    scanf("%d",&mas[i]);

 

  for(i = n - 1; i >= 0; i--)

    printf("%d ",mas[i]);

  printf("\n");

 

  return 0;

}

 

Реализация – STL reverse

 

#include <cstdio>

#include <vector>

#include <algorithm>

using namespace std;

 

int n, i;

vector<int> mas;

 

int main(void)

{

  scanf("%d",&n);

  mas.resize(n);

  for(i = 0; i < n; i++)

    scanf("%d",&mas[i]);

 

  reverse(mas.begin(),mas.end());

 

  for(i = 0; i < n; i++)

    printf("%d ",mas[i]);

  printf("\n");

  return 0;

}

 

Реализация – STL stack

 

#include <cstdio>

#include <stack>

using namespace std;

 

int n, i, val;

stack<int> s;

 

int main(void)

{

  scanf("%d",&n);

  for(i = 0; i < n; i++)

  {

    scanf("%d",&val);

    s.push(val);

  }

 

  while(!s.empty())

  {

    printf("%d ",s.top());

    s.pop();

  }

  printf("\n");

  return 0;

}

 

Java реализация – вывод массива справа налево

 

import java.util.*;

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    int n = con.nextInt();

    int mas[] = new int[n];

    for(int i = 0; i < n; i++)

      mas[i] = con.nextInt();

   

    for(int i = n - 1; i >= 0; i--)

      System.out.print(mas[i] + " ");

    System.out.println();

    con.close();

  }

}

 

Java реализация – reverse

 

import java.util.*;

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    int n = con.nextInt();

    int m[] = new int[n];

 

    // Read data

    for(int i = 0; i < n; i++)

      m[i] = con.nextInt();

 

    // Reverse an array

    int i = 0, j = n - 1;

    while(i < j)

    {

      int temp = m[i]; m[i] = m[j]; m[j] = temp;

      i++; j--;

    }

   

    // Print the reversed array

    for(i = 0; i < n; i++)

      System.out.print(m[i] + " ");

    System.out.println();

    con.close();

  }

}

 

Java реализация – реверс массива функцией

 

import java.util.*;

 

public class Main

{

  public static int[] reverse(int[] m)

  {

    int[] res = new int[m.length];

    int i = 0, j = m.length - 1;

    while(i < m.length)

    {

      res[i] = m[j];

      i++; j--;

    }

    return res;

  }

 

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    int n = con.nextInt();

    int m[] = new int[n];

 

    // Read data

    for(int i = 0; i < n; i++)

      m[i] = con.nextInt();

 

    // Reverse an array

    m = reverse(m);

   

    // Print the reversed array

    for(int i = 0; i < n; i++)

      System.out.print(m[i] + " ");

    System.out.println();

    con.close();

  }

}

 

Java реализация – ArrayList вывод справа налево

 

import java.util.*;

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    int n = con.nextInt();

    ArrayList<Integer> mas = new ArrayList<Integer>();

    for(int i = 0; i < n; i++)

      mas.add(con.nextInt());

   

    for(int i = n - 1; i >= 0; i--)

      System.out.print(mas.get(i) + " ");

    System.out.println();

    con.close();

  }

}

 

Java реализация – class, reverse

 

import java.util.*;

 

class Array

{

  ArrayList<Integer> m;

 

  Array()

  {

    m = new ArrayList<Integer>();

  }

 

  public void add(int n)

  {

    m.add(n);   

  }

  public void Reverse()

  {

    int i = 0, j = m.size() - 1;

    while(i < j)

    {

      Collections.swap(m,i,j);

      i++; j--;

    }

  }

  public void Print()

  {

    for(int i = 0; i < m.size(); i++)

      System.out.print(m.get(i) + " ");

    System.out.println();

  }

};

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    int n = con.nextInt();

    Array a = new Array();

 

    // Read data

    for(int i = 0; i < n; i++)

      a.add(con.nextInt());

 

    // Reverse an array

    a.Reverse();

   

    // Print the reversed array

    a.Print();

   

    con.close();

  }

}

 

Python реализация

Читаем входные данные.

 

n = int(input())

lst = list(map(int, input().split()))

 

Выводим числа в обратном порядке.

 

for i in range(n - 1,-1,-1):

  print(lst[i], end = " ")

 

Python реализация – reverse

Читаем входные данные.

 

n = int(input())

lst = list(map(int, input().split()))

 

Переворачиваем список lst при помощи функции reverse.

 

lst.reverse()

 

Выводим перевернутый список.

 

print(*lst)